package entity;


import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.util.Enumeration;

/*
用来在调用feign的时候，添加生成令牌，便于让此服务调用其他的服务

这里是由于用户在看订单的时候，需要调用godds微服务，然后godds微服务是需认证的，不是所有的
操作都可以暴露给用户
 */

public class FeignInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        /***
         *      获取当前调用本方法用户的令牌
         *      将令牌封装到头文件中
         */

        //记录了当前用户请求本应用的所有数据，包含了请求头，参数等
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        //获取所有头的名字
        Enumeration<String> headerNames = requestAttributes.getRequest().getHeaderNames();
        //判断是否还有下一个元素
        //循环取所有的头和值
        while (headerNames.hasMoreElements()){
            //获取请求头的key
            String headerKey = headerNames.nextElement();
            //根据key获取对应的值
            String headerValue = requestAttributes.getRequest().getHeader(headerKey);
            //将请求头信息封装到头中，使用feign调用的时候，会传递给下一个微服务，用于认证
            requestTemplate.header(headerKey,headerValue);
        }
    }
}
